/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.eventos.beans;

import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.cip.esymons.eventos.bc.NumeraContratosDelegate;
import org.cip.esymons.eventos.be.NumeraContratos;
import org.cip.esymons.general.util.Utiles;


/**
 *
 * @author lizardo
 */
public class NumeraContratosController {
    private NumeraContratosDelegate delegado;
    private NumeraContratos numeracion;
    private NumeraContratos numeracionSeleccionada;
    List<NumeraContratos> listaNumeracion;
    private Long ncoCodigo;
    private Boolean opcion;
    private String numeraContratos;
    private Integer cantidad = 0;
    
    /*********************** Constructor de la clase *************************/
    public NumeraContratosController() {
        inicializar();
    }

    /*************************** Sets y Gettters *****************************/
    public NumeraContratosDelegate getDelegado() {
        return delegado;
    }

    public void setDelegado(NumeraContratosDelegate delegado) {
        this.delegado = delegado;
    }

    public List<NumeraContratos> getListaNumeracion() {
        listar();
        return listaNumeracion;
    }

    public void setListaNumeracion(List<NumeraContratos> listaNumeracion) {
        this.listaNumeracion = listaNumeracion;
    }

    public Long getNcoCodigo() {
        return ncoCodigo;
    }

    public void setNcoCodigo(Long ncoCodigo) {
        this.ncoCodigo = ncoCodigo;
    }

    public NumeraContratos getNumeracion() {
        return numeracion;
    }

    public void setNumeracion(NumeraContratos numeracion) {
        this.numeracion = numeracion;
    }

    public NumeraContratos getNumeracionSeleccionada() {
        actualizarNumeracion();
        return numeracionSeleccionada;
    }

    public void setNumeracionSeleccionada(NumeraContratos numeracionSeleccionada) {
        this.numeracionSeleccionada = numeracionSeleccionada;
    }

    public Boolean getOpcion() {
        return opcion;
    }

    public void setOpcion(Boolean opcion) {
        this.opcion = opcion;
    }

    public String getNumeraContratos() {
        return numeraContratos;
    }

    public void setNumeraContratos(String numeraContratos) {
        this.numeraContratos = numeraContratos;
    }

    public Integer getCantidad() {
        return cantidad;
    }

    public void setCantidad(Integer cantidad) {
        this.cantidad = cantidad;
    }

    

    /**************************** Metodos ************************************/
    public String inicializar() {
        numeracion = new NumeraContratos();
        numeracionSeleccionada = new NumeraContratos();
        delegado = new NumeraContratosDelegate();
        return "";
    }

    public String listar() {
        try {
            listaNumeracion = new ArrayList<NumeraContratos>();
            listaNumeracion = delegado.findAll();
            return null;
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "En listar la numeración de los contratos", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    public String cambiarNumeracion() {
        try {
            opcion = true;
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Tratar de cambiar la numeraciòn de los contratos", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    public String registrarNumeracion() {
        try {
            System.out.print("codigo numeracion: " + numeracion.getNcoCodigo());
            if (cantidad > 0) {
                listar();
                Integer total = listaNumeracion.size();
                numeraContratos = Utiles.rellenarCeros(numeraContratos, cantidad);
                if (total == 0) {
                    numeracion.setNcoNumeracion(numeraContratos);
                    numeracion.setNcoNumDigitos(cantidad);
                    delegado.create(numeracion);
                    numeracion = new NumeraContratos();
                }
                if (total > 0) {
                    actualizarNumeracion();
                    numeracionSeleccionada.setNcoNumeracion(numeraContratos);
                    numeracionSeleccionada.setNcoNumDigitos(cantidad);
                    delegado.edit(numeracionSeleccionada);
                    numeracionSeleccionada = new NumeraContratos();
                }
                //numeraContratos = "";
                mostrarMensaje("INFO: ", "Se registro con exito la numeración del contrato", FacesMessage.SEVERITY_INFO);
                //inicializar();
            } else {
                mostrarMensaje("WARN: ", "Debe ingresar un numero numerico mayor a cero", FacesMessage.SEVERITY_WARN);
            }
            
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "No se puede registrar la numeración.", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    public String eliminarModulo() {
        try {
            delegado.remove(numeracion);
            listaNumeracion = delegado.findAll();
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "No se pudo eliminar la numeracion del contrato.", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }

    private void actualizarNumeracion() {
        try {
            if (listaNumeracion.size() > 0) {
                numeracionSeleccionada = delegado.find(listaNumeracion.get(0).getNcoCodigo());
            }
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "En actualizr la numeración de los contratos", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
    }

}
